package com.atguigu.lease.web.admin.controller.apartment;

import com.atguigu.lease.common.result.Result;
import com.atguigu.lease.model.entity.PaymentType;
import com.atguigu.lease.web.admin.service.PaymentTypeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 前后端分离的项目：
 * 后端controller就是接口：前端与后端controller接口对接。
 *
 *      接口调用出现错误状态码？
 *          路径写错或资源不存在    404
 *          请求method错误        405
 *          无权访问              403
 *          参数错误              400
 *          服务器内部异常         500
 *          请求成功              200
 *
 *      接口主要功能：
 *          接收请求，获取数据(  @RequestParam    @PathVariable    @RequestBody     @ReqeustHeader   @CookieValue    HttpServletRequest)
 *          调用业务层，完成业务处理、数据处理
 *          返回结果给调用者(被称为客户端：可能移动端、 PC端、第三方系统、 Iot物联网设备)，统一结果封装(Result)。
 */

@Tag(name = "支付方式管理")
@RestController
@RequestMapping("/admin/payment")
public class PaymentTypeController {

    @Autowired
    PaymentTypeService paymentTypeService;

    /**
     {
     "code": 200,
     "message": "成功",
     "data": [
             {
             "id": 6,
             "name": "月付",
             "payMonthCount": "1",
             "additionalInfo": "押一付一"
             }
        ]
     }
     */
    //SpringMVC框架默认继承Jackson组件。通过HttpMessageConverter消息转换器，将bean对象序列化为JSON字符串。只需增加@ResponseBody
    @Operation(summary = "查询所有支付方式")
    @GetMapping("list")
    public Result<List<PaymentType>> listPaymentType() {
        List<PaymentType> paymentTypeList = paymentTypeService.list();
        return Result.ok(paymentTypeList);
    }

    //    http://localhost:8080/admin/payment/deleteById?id=1
    @Operation(summary = "根据ID删除支付方式")
    @DeleteMapping("deleteById")
    public Result deleteById(@RequestParam Long id) {
        paymentTypeService.removeById(id);
        return Result.ok();
    }


    @Operation(summary = "保存或更新支付方式")
    @PostMapping("saveOrUpdate")    //数据存放在请求体传递过来的。需要将请求体的JSON数据转换为Bean对象
    public Result saveOrUpdate(@RequestBody PaymentType paymentType) {
        paymentTypeService.saveOrUpdate(paymentType);
        return Result.ok();
    }
}
